package collection.stream;

import java.util.*;

/**
 * 常见的终端环节
 * 终端环节可以理解为是集合Stream中的最后一个环节
 */
public class StreamApiDemo3 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 3; i++){
            list.add(random.nextInt(100));
        }
        System.out.println(list);

        /*
        * 常见的终端环节：
        * min：获取流中最小的元素
        * max：获取流中最大的元素
        * anyMatch：判断流中是否存在元素满足lambda条件
        * allMatch：判断流中的元素是否都满足lambda条件
        * noneMatch：判断流中的元素是否都不满足lambda条件
        * reduce：积累操作
        * */

        //获取集合中的最小值
//        Optional<Integer> min = list.stream().min((e1,e2)->e1-e2);
//        int n = min.get();
//        System.out.println(n);

        int min = list.stream().min((e1,e2)->e1-e2).get();
        System.out.println(min);

        //获取集合中的最大值
        int max = list.stream().max((e1,e2)->e1-e2).get();
        System.out.println(max);


        //判断集合中是否存在偶数？
        /*anyMatch：判断流中是否存在元素满足lambda条件，
        只有一个元素满足条件则为t
         */
        boolean anyMatch = list.stream().anyMatch(e->e%2==0);
        System.out.println("是否存在偶数： "+anyMatch);

        //判断集合中是否都是奇数？
        boolean allMatch = list.stream().allMatch(e->e%2!=0);
        System.out.println("是否都是奇数?  "+allMatch);

        //判断集合中是否都>50?
        boolean noneMatch = list.stream().noneMatch(e->e<=50);
        System.out.println("是否都<=50?  "+noneMatch);

        /*
        * reduce：积累操作
        将集合每个元素最终积累为1个值
        * */
        int num = list.stream().reduce((e1,e2)->e1+e2).get();
        System.out.println(num);
    }
}
